在本小节中,我们将学习如何在Bash中使用算术运算符。
根据希望通过脚本获得的结果类型,我们有时可能需要应用算术运算符。像变量一样,它们也很容易应用。在bash脚本中,可以对数值执行算术运算以获得所需的结果。
Bash Shell支持11种算术运算符。
下表展示了每种算术运算符的语法,描述和示例:
运算符 | 描述 | 示例 |
---|---|---|
+ |
加法,数字(操作数)的加法 | $(( 10 + 3 )) ,结果为:13 |
- |
减法,从第一个到第二个操作数的减法 | $(( 10 - 3 )) ,结果为:7 |
* |
乘法,操作数的乘法。 | $(( 10 * 3 )) ,结果为:30 |
/ |
除法,第一个操作数除以第二个操作数并返回商。 | $(( 10 / 3 )) ,结果为:3 |
** |
求幂,第一操作数的第二操作数的幂值。 | $(( 10 ** 3 )) ,结果为:1000 |
% |
模,测量第一个操作数除以第二个操作数时的余数。 | $(( 10 % 3 )) ,结果为:1 |
+= |
通过常量递增变量,用于按提供的常量递增第一个操作数的值。 | x=10;let "x += 3";echo $x; 结果为:13 |
-= |
通过常量递减变量,用于按提供的常量递减第一个操作数的值。 | x=10;let "x -= 3";echo $x; 结果为:7 |
*= |
将变量乘以常数,用于将第一个操作数的值乘以提供的常数。 | x=10;let "x *= 3";echo $x; 结果为:30 |
/= |
将变量除以常数,用于计算(变量/常数)的值并将结果存储回变量。 | x=10;let "x /= 3";echo $x; 结果为:3 |
%= |
变量除以常数的余数,用于计算(变量%常数)的值并将结果存储回变量。 | x=10;let "x %= 3";echo $x; 结果为:1 |
1. Bash执行算术运算
在bash shell上有许多选项可以执行算术运算。下面提供了一些我们可以用来执行算术运算的选项:
1.1. 双括号
双括号是在Bash shell中执行基本算术运算的最简单机制,可以使用带或不带前导$
的双括号来使用此方法。
语法
((expression))
可以采用四种不同的方法来实现所需的目标。参考下面给出的方法,以了解如何使用双括号机制(假设想将数字10
和3
相加):
方法1
Sum=$((10+3))
echo "Sum = $Sum"
方法2
((Sum=10+3))
echo "Sum = $Sum"
方法3
Num1=10
Num2=3
((Sum=Num1+Num2))
echo "Sum = $Sum"
方法4
Num1=10
Num2=3
Sum=$((Num1+Num2))
echo "Sum = $Sum"
所有这些方法将输出相同的结果:
Sum = 13
下面的示例演示如何在Bash shell脚本中对运算符使用双括号:
Bash脚本文件:arithmetic-operator.sh
#!/bin/bash
x=6
y=10
echo "x=6, y=10"
echo "Addition of x & y"
echo $(( $x + $y ))
echo "Subtraction of x & y"
echo $(( $x - $y ))
echo "Multiplication of x & y"
echo $(( $x * $y ))
echo "Division of x by y"
echo $(( $x / $y ))
echo "Exponentiation of x,y"
echo $(( $x ** $y ))
echo "Modular Division of x,y"
echo $(( $x % $y ))
echo "Incrementing x by 5, then x= "
(( x += 5 ))
echo $x
echo "Decrementing x by 5, then x= "
(( x -= 5 ))
echo $x
echo "Multiply of x by 5, then x="
(( x *= 5 ))
echo $x
echo "Dividing x by 5, x= "
(( x /= 5 ))
echo $x
echo "Remainder of Dividing x by 5, x="
(( x %= 5 ))
echo $x
执行上面示例代码,得到以下结果:
1.2. Let构建
let
是Bash的内置命令,它能够执行算术运算。它遵循以下基本语法格式:
let <arithmetic expression>
下面给出一个示例,说明如何在Bash脚本中使用let
命令。将下面代码保存到文件:let-operator.sh
#!/bin/bash
x=10
y=6
z=0
echo "Addition"
let "z = $(( x + y ))"
echo "z= $z"
echo "Substraction"
let "z = $((x - y ))"
echo "z= $z"
echo "Multiplication"
let "z = $(( x * y ))"
echo "z = $z"
echo "Division"
let "z = $(( x / y ))"
echo "z = $z"
echo "Exponentiation"
let "z = $(( x ** y ))"
echo "z = $z"
echo "Modular Division"
let "z = $(( x % y ))"
echo "z = $z"
let "x += 5"
echo "Incrementing x by 5, then x= "
echo $x
let "x -= 5"
echo "Decrementing x by 5, then x= "
echo $x
let "x *=5"
echo "Multiply of x by 5, then x="
echo $x
let "x /= 5"
echo "Dividing x by 5, x= "
echo $x
let "x %= 5"
echo "Remainder of Dividing x by 5, x="
echo $x
执行上面示例代码,得到以下结果:
1.3. 反引号
在bash脚本中,还可以使用反引号和expr(称为通用表达式求值器)执行算术扩展。
`expr`
类似于let
,但是不会将结果保存到变量中,它直接打印结果。与let
不同,不需要将表达式用引号引起来。需要在表达式的项目之间使用空格。重要的是要注意,我们应该在命令替换中使用
`expr`
将输出保存到变量中。也可以不使用“反引号”而使用
`expr`
```。
**语法**
```bash
`expr item1 operator item2`
#或者
expr item1 operator item2
下面给出一个示例,说明如何在Bash脚本中使用反引号和expr
:
Bash脚本程序文件:backticks.sh,完整代码如下:
#!/bin/bash
#Basic arithmetic using expr
echo "a=10, b=20"
echo "c is the value of addition c=a+b"
a=10
b=20
echo "c= `expr $a + $b`"
执行上面示例代码,得到以下结果: